﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using SIGERP_Entidades;
using SIGERP_Negocio;

namespace SIGERP_Presentacion
{
    public partial class frmReclamoNuevo : Form
    {
        private Cliente c = null;
        private Usuario u = Config.usuario;
        private List<Cliente> clientes = Clientes.buscarClientes();
        private List<OrigenReclamo> origenesR=OrigenesReclamo.buscarOrigenes();
        private List<SubtipoReclamo> subtiposR=SubtiposReclamo.buscarSubtipos();
        ErrorProvider ep = new ErrorProvider();
        private bool creoReclamo = false;

        public frmReclamoNuevo()
        {
            InitializeComponent();
        }

        private void btnCancelar_Click(object sender, EventArgs e)
        {
            Close();
        }

        private void frmReclamoNuevo_Load(object sender, EventArgs e)
        {
            cargaCmbSubTipoReclamo(subtiposR);
            cargaCmbOrigenesReclamo(origenesR);
        }

        private void cargaCmbSubTipoReclamo(List<SubtipoReclamo> sts)
        {
            cmbSubtipoReclamo.Items.Clear();
            foreach (SubtipoReclamo st in sts)
            {
                cmbSubtipoReclamo.Items.Add(st);
            }
        }

        private void cargaCmbOrigenesReclamo(List<OrigenReclamo> ors)
        {
            cmbSubtipoReclamo.Items.Clear();
            foreach (OrigenReclamo or in ors)
            {
                cmbOrigenReclamo.Items.Add(or);
            }
        }

        private void btnAceptar_Click(object sender, EventArgs e)
        {
            ep.Clear();

            if (c==null)
            {
                ep.SetError(txtCliente, "No ha seleccionado un cliente");
                btnBuscarCliente.Focus();
                return;
            }

            if (cmbOrigenReclamo.SelectedIndex == -1)
            { 
                ep.SetError(cmbOrigenReclamo,"No ha seleccionado un origen");
                cmbOrigenReclamo.Focus();
                return;
            }

            if(txtDescripcion.Text.Trim().Equals("")){
                ep.SetError(txtDescripcion, "No ha ingresado la descripción del reclamo");
                txtDescripcion.Focus();
                return;
            }

            if (cmbSubtipoReclamo.SelectedIndex == -1)
            {
                ep.SetError(cmbSubtipoReclamo,"No ha seleccionado un subtipo");
                cmbSubtipoReclamo.Focus();
                return;
            }

            if (MessageBox.Show("¿Desea dar de alta el reclamo?", Text, MessageBoxButtons.YesNo, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button2) == DialogResult.Yes)
            {
                Reclamo r = new Reclamo();
                r.cliente = c;
                r.origen = (OrigenReclamo)cmbOrigenReclamo.SelectedItem;
                r.descripcion = txtDescripcion.Text;
                r.subtiporeclamo = (SubtipoReclamo)cmbSubtipoReclamo.SelectedItem;
                r.usuario = u;
                int nro_reclamo=Reclamos.Agregar(r);
                creoReclamo = true;
                MessageBox.Show("El nro del reclamo es: "+nro_reclamo);
                Close();
            }
            
        }

        private List<SubtipoReclamo> busqueda(String letras) { 
            List<SubtipoReclamo> strs=new List<SubtipoReclamo>();
            foreach (SubtipoReclamo st in subtiposR) {
                //BUSCO POR DESCRIPCION DE SUBTIPO
                if(st.descripcion.Contains(letras))strs.Add(st);
                //SINO BUSCO POR DESCRIPCION DE TIPO
                else if (st.tipo.descripcion.Contains(letras)) strs.Add(st);
            }
            return strs;
        }

        private void cmbSubtipo_TextUpdate(object sender, EventArgs e)
        {     
            String letras = cmbSubtipoReclamo.Text.ToUpper();
            
            if (letras.Length > 2)
            {
                cargaCmbSubTipoReclamo(busqueda(letras));
                cmbSubtipoReclamo.DroppedDown = true;

            }
            else
            {
                cmbSubtipoReclamo.DroppedDown = false;
                cargaCmbSubTipoReclamo(subtiposR);
            }
            cmbSubtipoReclamo.SelectionStart = letras.Length;
            
        }

        private void btnBuscarCliente_Click(object sender, EventArgs e)
        {
            frmBuscarCliente fbc = new frmBuscarCliente();
            fbc.ShowDialog();
            if (fbc.getCliente() != null)
            {
                c = fbc.getCliente();
                txtCliente.Text = c.tipodocumento + " " + c.numero_documento + " - " + c.apellido + ", " + c.nombre;
            }
        }

        private void btnVerReclamos_Click(object sender, EventArgs e)
        {

            if (c != null)
            {
                if ((Reclamos.buscarReclamosEnCursoPorCliente(c)).Count() != 0)
                {
                    frmReclamosCliente frm = new frmReclamosCliente(c);
                    frm.ShowDialog();
                    if (frm.seReitero() == true)
                    {
                        creoReclamo = true;
                        Close();
                    }
                }
                else
                {
                    MessageBox.Show("El Cliente no posee reclamos", Text, MessageBoxButtons.OK, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button2);
                }
            }
        }

        public bool dioDeAlta() 
        {
            return creoReclamo;
        }

        private void toolStripAyuda_Click_1(object sender, EventArgs e)
        {
            Help.ShowHelp(this, "/SIGERP_AYUDA.chm", HelpNavigator.Topic, "frmReclamoNuevo.htm");
        }
    }
}
